package br.com.fatecmc.persephone.core.recursoseletricos.impl;



import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;

import br.com.fatecmc.core.dao.AbstractDAO;
import br.com.fatecmc.fatec.domain.Entidade;
import br.com.fatecmc.persephone.propriedade.domain.Propriedade;
import br.com.fatecmc.persephone.recursosEletricos.domain.RecursosEletricos;



public class DAORecursosEletricos extends AbstractDAO{

	@Override
	public void salvar(Entidade obj) throws IllegalArgumentException {
		try {
            Propriedade p = (Propriedade) obj;
            conexao.getConexao().createStatement(); 
            String sql =  "INSERT INTO tb_propriedades_rec_eletricos (" +
            		"id_propriedade, " +
            		"energia_disponivel_flg, " +
            		"concessionaria_energia, " +
            		"problemas_fornecimento" +
            		") " +
            		"VALUES(?,?,?,?)";
            PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
            pstm.setInt(1, p.getId());
            
            pstm.setBoolean(2, p.getRecursosEletricos().getEnergiaDisponivel());
            pstm.setString(3, p.getRecursosEletricos().getConcessionaria());
            pstm.setString(4, p.getRecursosEletricos().getProblemasFornecimento());
            pstm.executeUpdate();
            conexao.getConexao().close();
            pstm.close();
        } catch (SQLException ex) {
            Logger.getLogger(DAORecursosEletricos.class.getName()).log(Level.SEVERE, null, ex);
        }				
	}

	@Override
	public Entidade alterar(Entidade obj) {
		try {
            Propriedade p = (Propriedade) obj;
            conexao.getConexao().createStatement(); 
            String sql =  "UPDATE tb_propriedades_rec_eletricos SET " +
            		"energia_disponivel_flg=?, " +
            		"concessionaria_energia=?, " +
            		"problemas_fornecimento=? WHERE id_propriedade=?";
            PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
            
            pstm.setBoolean(1, p.getRecursosEletricos().getEnergiaDisponivel());
            pstm.setString(2, p.getRecursosEletricos().getConcessionaria());
            pstm.setString(3, p.getRecursosEletricos().getProblemasFornecimento());
            pstm.setInt(4, p.getId());
            pstm.executeUpdate();
            conexao.getConexao().close();
            pstm.close();
            return p;
        } catch (SQLException ex) {
            Logger.getLogger(DAORecursosEletricos.class.getName()).log(Level.SEVERE, null, ex);
        }
		return obj;
	}

	@Override
	public boolean excluir(Entidade obj) {
		try {
            Propriedade p = (Propriedade) obj;
            conexao.getConexao().createStatement(); 
            String sql =  "DELETE FROM tb_propriedades_rec_eletricos WHERE id_propriedade=?";
            PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
            pstm.setInt(1, p.getId());
            pstm.executeUpdate();
            conexao.getConexao().close();
            pstm.close();
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(DAORecursosEletricos.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
	}

	@Override
	public Collection consultar(Entidade obj) {
		ArrayList<RecursosEletricos> lista = new ArrayList<RecursosEletricos>();
		try {
            Propriedade p = (Propriedade) obj;
            conexao.getConexao().createStatement(); 
            String sql =  "SELECT * FROM tb_propriedades_rec_eletricos WHERE id_propriedade=?";
            PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
            pstm.setInt(1, p.getId());
            ResultSet rs = pstm.executeQuery();
            
            while(rs.next()){
            	RecursosEletricos re = new RecursosEletricos();
            	re.setConcessionaria(rs.getString("concessionaria_energia"));
            	re.setEnergiaDisponivel(rs.getBoolean("energia_disponivel_flg"));
            	re.setProblemasFornecimento(rs.getString("problemas_fornecimento"));
            	lista.add(re);
            }
            
            conexao.getConexao().close();
            pstm.close();
            return lista;
        } catch (SQLException ex) {
            Logger.getLogger(DAORecursosEletricos.class.getName()).log(Level.SEVERE, null, ex);
            return lista;
        }
	}
}

